import { appConfig } from '@/config/index.js'

const baseURL = appConfig.apiBaseUrl
// 添加请求拦截器
uni.addInterceptor('request', {
  // 拦截前触发
  invoke(options) {
    uni.showLoading({ mask: true })
    if (options.url.indexOf('http') < 0) {
      if (options.url.indexOf('/saas') >= 0) {
        options.url = '/api' + options.url
      } else if (options.url.indexOf('/qms/') >= 0) {
        options.url = '/api' + options.url
      } else if (options.url.indexOf('wwwAppVersion') > 0) {
        options.url = '/api/www' + options.url
      }else{
        options.url = baseURL + options.url
      }
    }
    options.timeout = 30000
  },
  complete() {
    uni.hideLoading({
      noConflict: true,
    })
  },
})

/**
 * 请求函数
 * @param  UniApp.RequestOptions
 * @returns Promise
 *  1. 返回 Promise 对象
 *  2. 获取数据成功
 *    2.1 提取核心数据 res.data
 *    2.2 添加类型，支持泛型
 *  3. 获取数据失败
 *    3.1 401错误  -> 清理用户信息，跳转到登录页
 *    3.2 其他错误 -> 根据后端错误信息轻提示
 *    3.3 网络错误 -> 提示用户换网络
 */
// 2.2 添加类型，支持泛型
export const http = (options) => {
  // 1. 返回 Promise 对象
  return new Promise((resolve, reject) => {
    uni.request({
      ...options,
      // 响应成功
      success(res) {
        if (res.statusCode == 200) {
          // 实际业务状态码
          if (res.data.code == 200) {
            resolve(res.data)
          } else if (res.data.code == 9000) {
            if (options.qccx) {
              uni.reLaunch({
                url: '/pages_qccx/login',
              });
            } else {
              reject(res)
            }
          } else {
            reject(res)
            // 其他错误 -> 根据后端错误信息轻提示
            uni.showToast({
              icon: 'none',
              title: res.data.message || '请求错误',
            })
          }
        }
      },
      // 响应失败
      fail(err) {
        uni.showToast({
          icon: 'none',
          title: '网络错误，换个网络试试',
        })
      },
    })
  })
}

export const post = ({ url, data, method = 'POST', header, beforeRequest, afterRequest, format }) => {
  return http({
    url,
    method,
    data,
    header,
    beforeRequest,
    afterRequest,
    format,
  })
}

export const post_qccx = ({ url, data, method = 'POST', header, beforeRequest, afterRequest, format }) => {
  return http({
    url,
    method,
    data,
    header,
    beforeRequest,
    afterRequest,
    format,
    qccx: true,
  })
}
